package com.dhcc.DRGsHosp.web.controller;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.openkoala.koala.commons.InvokeResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

import com.dhcc.DRGsHosp.facade.OtherTargetFacade;
import com.dhcc.DRGsHosp.facade.dto.ParamMap;
import com.dhcc.DRGsHosp.infra.util.MonitorResultUtil;


/**
 * @title		:OtherTargetController.java
 * @description	:医院其他指标展示的控制层
 * @author		:yujiaolong
 * @date		:2017年5月25日
 * @version     :2.4
 */
@Controller
@RequestMapping("/otherTargetyjl170525")
public class OtherTargetController {

	@Autowired
	private OtherTargetFacade otherTargetFacade;
	
	private static List<String> excleFilePath = new ArrayList<String>();// ICD手术对照存放路径
	
	
	/**
	 * 
	 * @methodname :fileUploadTargetFile
	 * @Description : 医院其他指标文件上传
	 * @author:yujiaolong
	 * @return InvokeResult
	 * @date :2017年5月25日
	 */
	@ResponseBody
	@RequestMapping("/fileUploadTargetFile")
	public InvokeResult fileUploadTargetFile(HttpServletRequest request,HttpServletResponse response) throws IllegalStateException, IOException {
		excleFilePath = new ArrayList<String>();
		// 创建一个通用的多部分解析器
		CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
				request.getSession().getServletContext());
		// 判断 request 是否有文件上传,即多部分请求
		if (multipartResolver.isMultipart(request)) {
			// 转换成多部分request
			MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
			// 取得request中的所有文件名
			Iterator<String> iter = multiRequest.getFileNames();
			while (iter.hasNext()) {
				// 记录上传过程起始时的时间，用来计算上传时间
				int pre = (int) System.currentTimeMillis();
				// 取得上传文件
				MultipartFile file = multiRequest.getFile(iter.next());
				if (file != null) {
					// 取得当前上传文件的文件名称
					String myFileName = file.getOriginalFilename();
					// 如果名称不为“”,说明该文件存在，否则说明该文件不存在
					if (myFileName.trim() != "") {
						System.out.println(myFileName);
						// 重命名上传后的文件名
						String fileName =UUID.randomUUID()+"-"+myFileName;
						// 定义上传路径
						String path = request.getSession().getServletContext().getRealPath("/") + "upload";						
						File localFile = new File(path);
						if (!localFile.exists()) {
							localFile.mkdirs();
						}
						localFile = new File(path + File.separatorChar + fileName);
						try {
							file.transferTo(localFile);
							excleFilePath.add(path + File.separatorChar + fileName);
						} catch (Exception e) {
							e.printStackTrace();
						} // 文件上传至服务器
					}
				}
				// 记录上传该文件后的时间
				int finaltime = (int) System.currentTimeMillis();
			}
		}
		  return InvokeResult.success();
	}
	
	/**
	 * @methodname :analysisTarget
	 * @Description : 医院其他指标文件解析
	 * @author:yujiaolong
	 * @return InvokeResult
	 * @date :2017年5月25日
	 */
	@ResponseBody
	@RequestMapping(value = "/analysisTarget")
	//String icdVersion, String icdType,
	public InvokeResult analysisTarget(HttpServletRequest request, HttpServletResponse response) {		  
		 boolean flag = true;
	     for (String filePath : excleFilePath) {
	    	 if(!otherTargetFacade.analysisTarget(filePath).isSuccess()){
	    		 flag = false;
	    	 }				
		}
	     excleFilePath = new ArrayList<String>();
	    if(flag == true){
	    	return InvokeResult.success();
	    }
	    else{
	    	return InvokeResult.failure("");
	    }
	}
	
	
	/**
	 * @methodname :analysisTarget
	 * @Description : 医院其他指标增加
	 * @author:yujiaolong
	 * @return InvokeResult
	 * @date :2017年5月25日
	 */
	@ResponseBody
	@RequestMapping(value = "/targetAdd")
	public InvokeResult targetAdd(HttpServletRequest request, HttpServletResponse response) {		  
		Map<String,Object> dto=new ParamMap().newMap(request);
		return otherTargetFacade.targetAdd(dto);
	}
	
	/**
	 * @methodname :analysisTarget
	 * @Description : 医院其他指标查询
	 * @author:yujiaolong
	 * @return InvokeResult
	 * @date :2017年5月25日
	 */
	@ResponseBody
	@RequestMapping(value = "/targetSelect")
	public InvokeResult targetSelect(HttpServletRequest request, HttpServletResponse response) {		  
		Map<String,Object> dto=new ParamMap().newMap(request);
		return otherTargetFacade.targetSelect(MonitorResultUtil.object2String(dto.get("targetType")));
	}
	/**
	 * 
	 *  depList.  
	 *  @Description：查询全院科室名称和code
	 *  @Author ZouYiyu
	 *  @return 
	 *  @Date:2017年7月11日下午5:47:22
	 */
	@ResponseBody
	@RequestMapping(value = "/depList")
	public InvokeResult depList(){
		return InvokeResult.success(otherTargetFacade.depList());
	}
	
	/**
	 * @methodname :findTargetTable
	 * @Description : 医院指标数据查询
	 * @author:yujiaolong
	 * @return InvokeResult
	 * @date :2017年6月1日
	 */
	@ResponseBody
	@RequestMapping(value = "/findTargetTable")
	public InvokeResult findTargetTable(HttpServletRequest request, HttpServletResponse response) {		  
		Map<String,Object> dto=new ParamMap().newMap(request);
		return otherTargetFacade.findTargetTable(dto);
	}
	
	
	/**
	 * @methodname :findQuarterTable
	 * @Description : 医院季度指标数据查询
	 * @author:yujiaolong
	 * @return InvokeResult
	 * @date :2017年7月7日
	 */
	@ResponseBody
	@RequestMapping(value = "/findQuarterTable")
	public InvokeResult findQuarterTable(HttpServletRequest request, HttpServletResponse response) {		  
		Map<String,Object> dto=new ParamMap().newMap(request);
		return otherTargetFacade.findQuarterTargetTable(dto);
	}
	
	
}
